/*
 * Motor.h
 *
 *  Created on: 18/10/2012
 *      Author: Ignacio Galvez
 */

#ifndef MOTOR_H_
#define MOTOR_H_


#include <list>
#include <map>
#include <string>
#include "Superficie.h"

class LineaDeEntradaPajaros;
class Bonificable;
class Pajaro;
class Caja;
class Cerdito;
class Huevo;
class Jugador;
class MonticuloDeHuevos;
class Nivel;
class  Motor{
public:
	Motor(Nivel& nivel);
	void iniciar();
	void  agregarJugador(Jugador* jugador);
	int  getNumeroNivel();
	void generarPajaros();
	/*al final de la partida se bonifica
	 * a los jugadores segun la vida
	 * del cerdito y la del monticulo de huevos*/
	void bonificar();
	bool perdioNivel();
	bool ganoNivel();
	void actualizarEstado(double t);
	std::list<Jugador*> getJugadores();
	std::list<Pajaro*> getPajaros();
	std::list<Huevo*> getHuevos();
	std::list<Cerdito*> getCerditos();
	std::list<Caja*> getCajas();
	std::list<Bonificable*> getBonificables();
	virtual ~Motor();
private:
	int numeroNivel;
	int puntajeMaximo;
	int puntajeActual;
	int cantidadDeJugadores;
	double timeout;
	bool gano;
	bool perdio;
	Superficie superficie;
	MonticuloDeHuevos* monticuloDeHuevos;
	std::list<Jugador*> jugadores;
	std::list<Pajaro*> pajaros;
	std::list<Huevo*> huevos;
	std::list<Cerdito*> cerditos;
	std::list<Caja*> cajas;
	std::list<Bonificable*> bonificables;
	std::list<LineaDeEntradaPajaros*> lineasEntradaPajaros;
	void realizarDisparos();
	void ejecutarColisiones(double t);
	void eliminarJugadores();
};

#endif /* Motor_H_ */
